為了方便日後查詢,我將我在 PPT 發表 http://goo.gl/ykNk2s 的文章,轉貼過來並進行一些內容的修正。
enum 和 set 兩種資料類型共同特性。
兩種都是以「字串」方式儲存資料,和其它字串類型的差異在於資料庫會先幫你做檢查。
兩種最多只能設定 64 組選項。
設定欄位為
enum('male','female')時,表示資料只能是'male'或'female'選項的其中之一,相當於 HTML 中的 radio 的概念。設定欄位為
set('red','green','blue')時,資料將是由逗號隔開的字串組合。例如'red,green'或'green'或'blue,red',相當於 HTML 中的 checkbox。
set 的額外特性
一個是資料寫入前,系統會自動把資料重新排序,像是
'blue,red'就會重新被調整為'red,blue'再儲存。如果寫入的資料有重複的部分,會自動移除。像
'red,green,red,blue'就會被修正為'red,green,blue'如果寫入的資料含有不存在的選項,也會自動移除。像
'red,yellow,blue'就會被修正為'red,blue'另一個是 set 可接受選項以「2 的{順序}次方」總合碼(sum)來表示選項組合。
(2的0次方) 2^0 = red => 1,
(2的1次方) 2^1 = green => 2,
(2的2次方) 2^2 = blue => 4, … 以此類推當我想設定
'red,blue'時,也可以直接設定數字 5 (1+4)。同理當我設定數字 7 時,表示為'red,green,blue'。而且這個規則也可以用在WHERE條件,像是WHERE color = 3和WHERE color = 'red,green'會是一樣的。MySQL 有一個針對 set 的搜尋語法 FIND_IN_SET